#include "rna.h"

int main(int argc, char **argv){
	void teste1(){
		int i = 0;
	    //ENTER novo;
	    //PESOS novo;
	    //cria_entrada_aleatoria_ponteiro(&novo);
    	for ( i = 0; i < NUM_ENTRADAS; ++i)
	        //printf("%i - Dado: %f\n",i, novo->xs[i]);
        	printf("%2i - Dado: %f\n",i+1, (cria_entrada_zerada())->xs[i]);
	}
	void teste2(){
		register int i = 0, j = 0;
		PESOS saida[6];
		for ( ; i < 6; ++i)
			saida[i] = cria_entrada_aleatoria();
		treinar(padroes, saida, 6, 6);
		for( i = 0; i < 6 ; ++i)
		    for ( j = 0; j < NUM_PADROES; ++j)
    		    printf("Resposta do neuronio %2d ao padrao %2d: %2d\n%s",i,j,regra_delta(saida[i],&(padroes[j])),j!=5?"":"\n");
	}
	void exercicio1(){
	    register int i = 0;
	    PESOS neuronio[1];
	    neuronio[0] = cria_entrada_zerada();
	    treinar(padroes, neuronio, 1, 2);
	    printf("\n");
	    for ( ; i < NUM_ENTRADAS; ++i)
	        printf("Nuerônio 0, peso %d: %03.3f\n",i,neuronio[0]->xs[i]);
	    printf("\n");
	    for ( i = 0; i < 20; ++i){
	        printf("Resultado da aplicação do neurônio ao padrão distorcido %2d: %2d\n",i+1,regra_delta(neuronio[0],&(padroes_distorcidos[i])));
	    }
	    printf("\n");
	    for ( i = 2; i < 6; ++i)
	        printf("Resultado da aplicação do neurônio ao padrão %2d: %2d\n",i,regra_delta(neuronio[0],&(padroes[i])));
	}
	void exercicio2(){
	    register int i = 0, j = 0;
	    PESOS neuronio[2];
	    neuronio[0] = cria_entrada_zerada();
	    neuronio[1] = cria_entrada_zerada();
	    treinar(padroes, neuronio, 2, 2);
	    printf("\n");
	    for ( ; i < 2; ++i)
	        for( j = 0; j < NUM_ENTRADAS; ++j)
	            printf("Neurônio %2d peso %d: %03.3f\n",i,j,neuronio[i]->xs[j]);
	    printf("\n");
	    
	    for ( i = 0; i < 20; ++i){
	        printf("Resultado da aplicação do neurônio 0 ao padrão distorcido %2d: %2d\n",i+1,regra_delta(neuronio[0],&(padroes_distorcidos[i])));
	        printf("Resultado da aplicação do neurônio 1 ao padrão distorcido %2d: %2d\n",i+1,regra_delta(neuronio[1],&(padroes_distorcidos[i])));
	    }
	    printf("\n");
	    for ( i = 2; i < 6; ++i){
	        printf("Resultado da aplicação do neurônio 0 ao padrão %2d: %2d\n",i,regra_delta(neuronio[0],&(padroes[i])));
	        printf("Resultado da aplicação do neurônio 1 ao padrão %2d: %2d\n",i,regra_delta(neuronio[1],&(padroes[i])));
	    }
	}
	void exercicio3(){
	    register int i = 0, j = 0;
	    PESOS neuronio[6];
	    neuronio[0] = cria_entrada_zerada();
	    neuronio[1] = cria_entrada_zerada();
	    neuronio[2] = cria_entrada_zerada();
	    neuronio[3] = cria_entrada_zerada();
	    neuronio[4] = cria_entrada_zerada();
	    neuronio[5] = cria_entrada_zerada();
	    treinar(padroes, neuronio, 6, 6);
	    printf("\n");
	    for ( ; i < NUM_PADROES; ++i)
	        for( j = 0; j < NUM_ENTRADAS; ++j)
	            printf("Neurônio %2d peso %d: %03.3f\n",i,j,neuronio[i]->xs[j]);
	    printf("\n");
	    
	    for ( i = 0; i < NUM_PADROES_DISTORCIDOS; ++i){
	        for ( j = 0; j < NUM_PADROES; ++j)
    	        printf("Resultado da aplicação do neurônio %2d ao padrão distorcido %02d: %2d\n",j,i+1,regra_delta(neuronio[j],&(padroes_distorcidos[i])));
	    }
	    printf("\n");
	    /*for ( i = 2; i < 6; ++i){
	        printf("Resultado da aplicação do neurônio 0 ao padrão %2d: %2d\n",i,regra_delta(neuronio[0],&(padroes[i])));
	        printf("Resultado da aplicação do neurônio 1 ao padrão %2d: %2d\n",i,regra_delta(neuronio[1],&(padroes[i])));
	    }*/
	}
	on_start();
    exercicio3();
    return 0;
}
